export default {
  data() {
    return {
      // 对话框是否显示
      setRoleDialogVisible: false,
      // 数据列表
      RolesTableData: [],

      // 权限列表指定数据
      setRoleProps: {
        label: 'authName',
        children: 'children'
      },
      // 权限列表数据
      setRoleData: [],
      // 默认被勾选的 树形节点
      defaultCheckedKeys: [],
      // 点击分配权限按钮时，当前角色ID
      RoleID: ''
    }
  },
  created() {
    this.getRolesData()
  },
  methods: {
    // 获取角色列表
    async getRolesData() {
      const { data: res } = await this.$http.get('roles')
      if (res.meta.status !== 200) return this.$message.error('数据获取失败')
      // 成功
      this.RolesTableData = res.data
      this.$message.success('数据获取成功')
    },
    // 标签关闭事件
    async removeDel(scope, rightId) {
      // 确认弹出框
      const ret = await this.$confirm('此操作将永久删除该权限, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).catch(err => err)
      // 判断结果
      if (ret !== 'confirm') {
        return this.$message({
          type: 'info',
          message: '已取消删除'
        })
      }

      // 确认删除
      const { data: res } = await this.$http.delete(`roles/${scope.row.id}/rights/${rightId}`)
      console.log(res)
      console.log(scope.row.children)
      console.log(scope.row)

      // 判断是否删除成功
      if (res.meta.status !== 200) return this.$message.error('修改用户权限失败')
      // 成功修改，把返回来的值赋值给，scope.row.children
      scope.row.children = res.data
    },
    // 点击按钮显示 分配权限 对话框
    async showSetRoleDialog(scope) {
      // 重新获取页面数据
      this.getRolesData()

      // 获取数据
      const { data: res } = await this.$http.get('rights/tree')
      // console.log(res)
      if (res.meta.status !== 200) return this.$message.error('err')
      // 保存数据
      this.setRoleData = res.data
      // console.log(res.data)
      this.$message.success('权限获取成功')
      this.setRoleDialogVisible = true

      // 点击按钮时，调用获取三级权限函数
      this.getLeafKeys(scope.row, this.defaultCheckedKeys)
      // console.log(scope.row)
      // console.log(this.defaultCheckedKeys)

      // 获取当前角色ID
      this.RoleID = scope.row.id
    },
    // 递归获取所有的三级权限的id
    getLeafKeys(node, keys) {
      // 判断当前节点是否有children这个属性，如果有，则把ID添加到数组
      if (!node.children) {
        keys.push(node.id)
      } else {
        // 有children这个属性,遍历所有子节点，并查看是否有children这个属性
        node.children.forEach(item => this.getLeafKeys(item, keys))
      }
    },
    // 点击按钮分配权限
    async setRights() {
      // 获取选中的叶子(最外面的复选框)节点，ID
      const k1 = this.$refs.tree.getCheckedKeys()
      const k2 = this.$refs.tree.getHalfCheckedKeys()
      // console.log(k1, k2)
      // 延展运算，把数组合并成一个新的数组
      const k3 = [...k1, ...k2]

      // 发送数据
      const { data: res } = await this.$http.post(`roles/${this.RoleID}/rights`, {
        rids: k3.join(',')
      })

      // 判断响应数据
      if (res.meta.status !== 200) return this.$message.error('err1')

      // succ
      this.setRoleDialogVisible = false
      this.$message.success('succ1')
      // 重新获取页面数据
      this.getRolesData()
    }
  }
}
